package com.zq.solution.array;

/**
 * @ClassName ValidMountainArray
 * @Description 941. 有效的山脉数组
 * 给定一个整数数组A，如果它是有效的山脉数组就返回true，否则返回 false。
 *山脉数组：
 *   A.length >= 3
 *   在0 < i< A.length - 1条件下，存在i使得：
 *   A[0] < A[1] < ... A[i-1] < A[i]
 *   A[i] > A[i+1] > ... > A[A.length - 1]
 * 示例 ：
 *   输入：[0,3,2,1]
 * @Author ZQ
 * @Date 2020/11/3 8:49
 * @Version V1.0
 **/
public class ValidMountainArray {
    public static boolean validMountainArray(int[] A) {
        int N = A.length;
        int i = 0;
        // 递增扫描
        while (i + 1 < N && A[i] < A[i + 1]) i++;
        // 最高点不能是数组的第一个位置或最后一个位置
        if (i == 0 || i == N - 1) return false;
        // 递减扫描
        while (i + 1 < N && A[i] > A[i + 1]) i++;
        return i == N - 1;
    }

    public static boolean validMountainArray1(int[] A) {
        if (A.length < 3) return false;
        int i = 0;
        while (i < A.length - 1){
            if (A[i + 1] < A[i]){
                break;
            }else if (A[i + 1] == A[i]){
                return false;
            }else{
                i++;
            }
        }
        if (i == A.length - 1 || i == 0) return false;
        while (i < A.length - 1){
            if (A[i + 1] >= A[i]){
                return false;
            }
            i++;
        }
        return true;
    }

    public static void main(String[] args) {
        int[] a = new int[]{8,7,6,5,4,3,2,1};
        System.out.println(validMountainArray(a));
    }
}
